# -*- coding: utf-8 -*-
"""
@Time ： 2021/7/28 21:16
@Auth ： Mr.掌心 2929184523
@Company ：特斯汀学院 @testingedu.com.cn
@Function ：QQ登录滑块验证
"""
from time import sleep

import cv2
import requests
from selenium import webdriver
from selenium.webdriver import ActionChains


def FindPic(bj="../lib/bj.jpg", block="../lib/block.jpg"):
    """
    找出图像中最佳匹配位置
    :param target: 目标即背景图
    :param template: 模板即需要找到的图
    :return: 返回最佳匹配及其最差匹配和对应的坐标
    """
    #读取图片
    target_rgb = cv2.imread(bj)
    #灰度处理
    target_gray = cv2.cvtColor(target_rgb, cv2.COLOR_BGR2GRAY)
    #读取滑块
    template_rgb = cv2.imread(block, 0)
    #匹配缺口在背景图的位置
    res = cv2.matchTemplate(target_gray, template_rgb, cv2.TM_CCOEFF_NORMED)
    #获取最差和最佳的匹配
    value = cv2.minMaxLoc(res)
    print(value)
    # 返回最佳匹配的x坐标
    return value[2][0]

#打开浏览器
driver = webdriver.Chrome()
driver.implicitly_wait(10)
#打开网站
driver.get('https://im.qq.com')
driver.maximize_window()
driver.find_element_by_xpath('//*[@id="loginInfo"]/a').click()

driver.switch_to.frame(driver.find_element_by_xpath('//*[@name="frame-login"]'))
driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()
driver.find_element_by_xpath('//*[@id="u"]').send_keys('423234552')
driver.find_element_by_xpath('//*[@id="p"]').send_keys('123wsdf')
sleep(1)
driver.find_element_by_xpath('//*[@id="login_button"]').click()


driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="tcaptcha_iframe"]'))

while True:
    #获取图片地址
    sleep(3)
    ele_bj = driver.find_element_by_xpath('//*[@id="slideBg"]')
    src_bj = ele_bj.get_attribute('src')
    ele_block = driver.find_element_by_xpath('//*[@id="slideBlock"]')
    src_block = ele_block.get_attribute('src')
    print(src_bj)

    #下载
    img_bj = requests.get(src_bj).content
    f = open('../lib/bj.jpg', mode='wb')
    f.write(img_bj)
    f.close()

    img_block = requests.get(src_block).content
    f = open('../lib/block.jpg', mode='wb')
    f.write(img_block)
    f.close()

    x = FindPic('../lib/bj.jpg','../lib/block.jpg')
    print(x)

    x = int(x * 280 / 680) - 23

    #滑动
    action = ActionChains(driver)
    action.click_and_hold(ele_block).perform()
    action.move_by_offset(x, 0).perform()
    action.release().perform()

    try:
        driver.find_element_by_xpath('//*[@id="e_reload"]').click()
    except:
        break

#driver.quit()

#课后作业：失败重试
#可以写个死循环：成功了退出，不成功一直滑

#最好不要直接解压 然后导入pycharm运行
#如果一定要解压导入运行，请把文件改名


